<!DOCTYPE html>  
<html>  
  <head>  
    <title>Extent Interaction</title>  
    <link rel="stylesheet" href="https://openlayers.org/en/v4.2.0/css/ol.css" type="text/css">  
    <!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->  
    <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>  
    <script src="https://openlayers.org/en/v4.2.0/build/ol.js"></script>  
  </head>  
  <body>  
    <div id="map" class="map"></div>  
    <script>  
      var vectorSource = new ol.source.Vector({  
        url: 'https://openlayers.org/en/v4.2.0/examples/data/geojson/countries.geojson',  
        format: new ol.format.GeoJSON()  
      });  
  
      var map = new ol.Map({  
        layers: [  
          new ol.layer.Tile({  
            source: new ol.source.OSM()  
          }),  
          new ol.layer.Vector({  
            source: vectorSource  
          })  
        ],  
        target: 'map',  
        view: new ol.View({  
          center: [0, 0],  
          zoom: 2  
        })  
      });  
  
      // 创建Extent交互控件  
      var extent = new ol.interaction.Extent({  
        condition: ol.events.condition.platformModifierKeyOnly  
      });  
      map.addInteraction(extent);  
      // 不激活Extent交互控件  
      extent.setActive(false);  
  
      // Enable interaction by holding shift  
      // 通过按住shift键来激活Extent交互控件  
      this.addEventListener('keydown', function(event) {  
        if (event.keyCode == 16) {  
          extent.setActive(true);  
        }  
      });  
      // 当shift键释放的时候，不激活Extent控件  
      this.addEventListener('keyup', function(event) {  
        if (event.keyCode == 16) {  
          extent.setActive(false);  
        }  
      });  
    </script>  
  </body>  
</html>  